// ! sort  排序

var arr = [100, 89, 7, 45, 20];

// arr.sort();

// sort 的参数是一个函数，这个函数是 sort 函数底层在调用
// a比b大则调换位置，a比b小则不变
// arr.sort(function hello(a,b) {
//     return a - b;
// })

// console.log(arr);

// ! forEach 遍历
// for (var i = 0; i < arr.length; i++) {
//     console.log(arr[i], i);
// }

// ! forEach 的参数一个函数，这个函数是 forEach 函数底层在调用
// ! 对于 forEach 函数而言，只需要关心每一个数组项和他对应的索引
// ! item : 数组项   index ：对应的索引
var sum = 0;
arr.forEach(function (item, index) {
    console.log('当前是第' + index + '项，值为：' + item);
    sum += item;
})

console.log(sum);


// 大概底层逻辑
// Array.prototype.forEach2 = function(callback) {
//     if (typeof callback === 'function') {
//         for (var i = 0; i < this.length; i++) {
//             callback(this[i], i);
//         }
//     }
// }

// arr.forEach2(function(item, index){
//     console.log('当前是第' + index + '项，值为：' + item);
// })

// ! map 映射，将数组的每一个元素映射成一个新的值
// ! 对于 map 的参数函数而言，只需要关心每一个数组项和它对应的索引
var arr2 = [1, 2, 3, 4, 5, 6];

// 想要[1, 4, 9, 16, 25, 36];

// function plus(arr) {
//     var newArr = [];

//     for (var i = 0; i < arr.length; i++) {
//         newArr[i] = arr[i] * arr[i]
//     }

//     return  newArr;
// }

// var arr3  = plus(arr2);

// console.log(arr3);

var arr3 = arr2.map(function (item, index) {
    return item * item;
})

console.log(arr3);